<?php
namespace app;
include_once('autoloader.php');
include_once('functions.php');

define('APP_DEBUG', false);

if (APP_DEBUG) {
    // 除了 E_NOTICE，报告其他所有错误
    error_reporting(E_ALL ^ E_NOTICE);
} else {
    // 关闭所有PHP错误报告
    error_reporting(0);
}

try {
    // 启用session，解决全局登录的问题
    session_start();

    // 动态调用
    // 获取到控制器名称 controller
    // 获取到方法名称 action
    $action = 'index';
    $controller = 'Index';

    // 根据path_info获取控制器及action
    if (isset($_SERVER['PATH_INFO'])) {
        $pathInfo = $_SERVER['PATH_INFO'];
        if (substr($pathInfo, -1) === '/') {
            $pathInfo = substr($pathInfo, 0, strlen($pathInfo) - 1);
        }
        $pathInfo = substr($pathInfo, 1);
        $pathInfos = explode('/', $pathInfo);
        $controller = ucfirst($pathInfos[0]);
        if (count($pathInfos) > 1) {
            $action = $pathInfos[1];
        }
    }

    define('APP_CONTROLLER', $controller);

    // 动态调用控制器上的某个方法 
    $fullController = 'app\controller\\' . $controller . 'Controller';
    $controllerInstance = new $fullController;
    if (method_exists($controllerInstance, $action)) {
       echo $controllerInstance->$action(); 
    } else {
        throw new \RuntimeException("未找到触发器：$action");
    }
    
} catch (\Exception $e) {
    if (APP_DEBUG) {
        throw $e;
    } else {
        echo '<h1 style="margin-top: 5em; color: gray; text-align: center">系统发生错误，请联系系统管理员:13988888888。</h1>';
    }
}
